#pragma once
#include<deque> 
#include<vector>
#include<list>

template <class T, class Container = list<T>>
class Queue
{
public:
	void push(const T& x)
	{
		_con.push_back(x);
	}
	void pop()
	{
		_con.pop_front();
	}
	size_t size()
	{
		return _con.size();
	}
	const T& front()const
	{
		return _con.front();
	}

	const T& back()const
	{
		return _con.back();
	}
	bool empty()
	{
		return _con.empty();
	}
private:
	Container _con;
};